import logging
import os
from datetime import datetime

# 创建 logs 目录
log_dir = "logs"
os.makedirs(log_dir, exist_ok=True)

# 设置日志格式 - 添加模块名和行号
log_format = "%(asctime)s - %(name)s - %(levelname)s - [%(filename)s:%(lineno)d] - %(message)s"
date_format = "%Y-%m-%d %H:%M:%S"


# 配置应用专属logger
def configure_logging(app_name="wuhu_tool"):
    """配置logging系统，只记录应用日志"""
    # 获取应用主logger
    app_logger = logging.getLogger(app_name)
    app_logger.setLevel(logging.DEBUG)

    # 清除现有处理器
    if app_logger.handlers:
        app_logger.handlers.clear()

    # 创建格式器
    formatter = logging.Formatter(log_format, datefmt=date_format)

    # 文件处理器 - 添加过滤器只记录应用日志
    log_file = os.path.join(log_dir, f"{datetime.now().strftime('%Y-%m-%d')}.log")
    file_handler = logging.FileHandler(log_file, encoding='utf-8')
    file_handler.setLevel(logging.DEBUG)
    file_handler.setFormatter(formatter)

    # 添加过滤器，只记录wuhu_tool相关的日志
    class AppFilter(logging.Filter):
        def filter(self, record):
            return record.name.startswith(app_name)

    file_handler.addFilter(AppFilter())

    # 控制台处理器 - 也添加过滤器
    console_handler = logging.StreamHandler()
    console_handler.setLevel(logging.INFO)
    console_handler.setFormatter(formatter)
    console_handler.addFilter(AppFilter())

    # 添加到应用logger（不是根logger！）
    app_logger.addHandler(file_handler)
    app_logger.addHandler(console_handler)

    # 关键设置：禁止日志传播到根logger
    app_logger.propagate = False

    # 设置第三方库的日志级别为WARNING，减少输出
    third_party_loggers = ["PIL", "urllib3", "requests", "matplotlib"]
    for lib_name in third_party_loggers:
        logging.getLogger(lib_name).setLevel(logging.WARNING)

    return app_name


# 初始化并获取应用名称
APP_NAME = configure_logging("wuhu_tool")


# 简化函数 - 在其他模块中使用这个
def get_logger(module_name=None):
    """
    获取简化名称的logger
    如果提供module_name，返回 wuhu_tool.module_name
    如果不提供，返回 wuhu_tool
    """
    if module_name:
        return logging.getLogger(f"{APP_NAME}.{module_name}")
    else:
        return logging.getLogger(APP_NAME)


# 主logger
logger = get_logger()
logger.info("logger初始化完成")